public class question_06 {
}
//N字形转换
class Solution_06 {
    public String convert(String s, int numRows) {
//        思路是通过把字符串添加到一个二维矩阵里面去求解
//        最后一步补充到前面了，那就是别忘了考虑特殊的情况，也就是numRows为1的情况
        if(numRows==1){
            return s;
        }
//        第一步，确定这个矩阵的宽和高
        char[] resource = s.toCharArray();
        int l=0;int h=numRows;
//        int temp=resource.length;
////        定义一个临时数组，到时算宽度的时候会用到
//        int tempArr[]=new int[numRows-1];
//        for (int i = 0; i < tempArr.length; i++) {
//            if(i==0) {
//                tempArr[i]=numRows;
//            }else{
//                tempArr[i]=1;
//            }
//        }
////        求矩阵的长度
//        int index=0;
//        while (temp>0){
//            l++;
//            if(index==tempArr.length){
////               从头开始
//                index=0;
//            }
//            temp-=tempArr[index++];
//        }
        //这里修改求l的方式
        int cyc_num=numRows-1;
        int t=0;
        int k=0;
        while (k< resource.length){
            l++;
            if (t%cyc_num==0){
                k=k+numRows;
            }else {
                k=k+1;
            }
            t++;
        }

        char arr[][]=new char[numRows][l];
//        这里没有赋初值之后的每一个元素的默认值是\u0000或者0（这里的0不是数字而是阿斯特玛值是0的字符）
//        接下来就是第二个步骤啦
//        定义从下往上最多的空格数
        int max=numRows-2;
//        遍历每一列
//        一开始下面的空格数
        int index=0;
        int resourceIndex=0;
        for (int i = 0; i < l; i++) {
            if(index>max){
//                重新循环
                index=0;
            }
            if(index==0){
                for (int j = 0; j < h; j++) {
                    if(resourceIndex==resource.length){
                        break;
                    }
                    arr[j][i]=resource[resourceIndex++];
                }
                index++;
            }else{
                arr[h-index-1][i]=resource[resourceIndex++];
                index++;
            }
        }
//       到这一步已经获取到相应的二维数组了，现在只需要遍历存到一个数组里面，最后将这个数组转化成字符串进行返回
        char result[]=new char[s.length()];
//        重置index
        index=0;
//        结果的遍历是先行然后再列
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < l; j++) {
                if(arr[i][j]!=0){
                    result[index++]=arr[i][j];
                }
            }
        }

        return new String(result);
    }

    public static void main(String[] args) {
        Solution_06 solution_06=new Solution_06();
        String s = solution_06.convert("PAYPALISHIRING", 4);
        System.out.println(s);
    }
}